package Tree.TraversalByLevel;

import Tree.TreeNode;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * 二叉树的右视图，从右边看二叉树。
 * 其实也是用到层序遍历即可，只需要往结果数组里添加每一层的最后那个节点
 */
public class RightSideView {
    public static void main(String[] args) {

    }

    public List<Integer> rightSideView(TreeNode root){
        //先准备层序遍历，建立结果数组
        List<Integer> result = new ArrayList<>();
        if(root == null) return result;
        //初始化队列存放每一层的节点
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            int len = queue.size();
            for(int i = 0; i < len; i++){
                TreeNode curNode = queue.poll();
                if(curNode.left != null) queue.add(curNode.left);
                if(curNode.right != null) queue.add(curNode.right);
                if(i == len - 1){
                    result.add(curNode.val);
                }
            }
        }
        return result;
    }
}
